package com.xz.xzutils.module.xzmybatislogplus.extension;

import com.intellij.execution.Executor;
import com.intellij.execution.configurations.JavaParameters;
import com.intellij.execution.configurations.RunProfile;
import com.intellij.execution.runners.JavaProgramPatcher;
import com.intellij.openapi.project.ProjectManager;
import com.xz.xzutils.utils.MyBatisDetector;
import lombok.extern.slf4j.Slf4j;

import java.util.Optional;

/**
 * <p
 * 此扩展点的目的是执行java程序时检测是否使用了mybatis，如果使用了，则添加虚拟机代理程序
 * 此类只有在项目使用maven构建时生效，如果是gradle构建时，此扩展点不会生效，推荐使用
 * @see JvmArgsExtension
 * </p>
 *
 * @author DONG.WANG17@HAND-CHINA.COM
 * @since 2025-02-14 03:11
 */
@Slf4j
public class MyJavaProgramPatcher extends JavaProgramPatcher {
    @Override
    public void patchJavaParameters(Executor executor, RunProfile configuration, JavaParameters javaParameters) {
        System.out.println("位置：MyJavaProgramPatcher.patchJavaParameters");
        log.info("位置：{}", MyJavaProgramPatcher.class.getName());
        boolean b = MyBatisDetector.hasMybatisDependency(ProjectManager.getInstance().getDefaultProject());
        if (!b) {
            return;
        }
        log.info("使用了 mybatis,项目启动时添加虚拟机代理程序");

        String agentParameter = "-javaagent:C:\\workspace\\IntelliJIDEA\\plugin\\xz-utils\\xz-mybatis-agent\\build\\libs\\xz-mybatis-agent-all.jar=port=9090,token=tokenValue";

        Optional<String> findAny = javaParameters.getVMParametersList().getParameters().stream().filter(agentParameter::equals).findAny();
        if (findAny.isPresent()) {
            log.info("已经添加过代理参数[{}]，不执行任何操作", agentParameter);
            return;
        }
        // 添加 jvm 参数
        log.info("添加代理参数[{}]", agentParameter);
        javaParameters.getVMParametersList().addParametersString(agentParameter);
    }
}
